// history.js
const http = require('../../utils/http');
const config = require('../../config');

Page({
  data: {
    history: [],
    showDetail: false,
    currentItem: null,
    currentIndex: -1,
    loading: false,
    shareItem: null // 添加用于分享的数据
  },
  
  onLoad() {
    this.loadHistory();
  },
  
  onShow() {
    // 每次页面显示时重新加载历史记录，确保数据最新
    this.loadHistory();
  },
  
  /**
   * 跳转到历史记录详情页面
   */
  navigateToDetail(e) {
    const id = e.currentTarget.dataset.id;
    wx.navigateTo({
      url: `/pages/historyDetail/historyDetail?id=${id}`
    });
  },

  /**
   * 加载历史记录
   */
  async loadHistory() {
    this.setData({ loading: true });
    
    try {
      // 调用真实API接口获取历史记录
      const res = await http.get(config.API.HISTORY);
      console.log('获取历史记录成功:', res);
      
      // 处理API返回的数据
      let historyData = [];
      if (res && res.code === 200 && res.data && Array.isArray(res.data)) {
        historyData = res.data;
      }
      
      // 处理每条记录，根据新的接口数据结构进行格式化
      const processedHistory = historyData.map((item, index) => {
        // 获取转写结果预览文本
        const previewText = this.getPreviewText(item.recognitionResult);
        // 获取完整文本（去除时间戳）
        const fullText = this.getFullText(item.recognitionResult);
        
        return {
          ...item,
          // 格式化日期
          formattedDate: this.formatDate(item.createTime),
          // 格式化文件大小
          fileSize: this.formatFileSize(item.audioFileSize || 0),
          // 格式化音频时长
          formattedDuration: this.formatDuration(item.audioTime || 0),
          // 处理版本类型
          type: item.engineType === 'tengxun' ? '普通版' : '专业版',
          // 状态文本
          statusText: this.getStatusText(item.status || 0),
          // 转写结果预览
          previewText: previewText,
          // 完整转写结果
          fullText: fullText,
          // 展开状态
          expanded: false,
          // 兼容字段
          fileName: item.audioFileName,
          language: '中文'
        };
      });
      
      this.setData({
        history: processedHistory,
        loading: false
      });
      
    } catch (error) {
      console.error('获取历史记录失败:', error);
      wx.showToast({
        title: '获取历史记录失败',
        icon: 'none'
      });
      this.setData({ loading: false });
    }
  },
  
  /**
   * 格式化文件大小
   */
  formatFileSize(size) {
    if (size < 1024) {
      return size + 'B';
    } else if (size < 1024 * 1024) {
      return (size / 1024).toFixed(2) + 'KB';
    } else {
      return (size / (1024 * 1024)).toFixed(2) + 'MB';
    }
  },

  formatDuration(ms) {
    if (!ms) return '0秒';
    console.log('formatDuration:', ms)
    const seconds = Math.floor(ms / 1000);
    if (seconds < 60) return `${seconds}秒`;
    const minutes = Math.floor(seconds / 60);
    const remainingSeconds = seconds % 60;
    return `${minutes}分${remainingSeconds}秒`;
  },

  /**
   * 格式化日期
   */
  formatDate(timestamp) {
    const date = new Date(timestamp);
    const year = date.getFullYear();
    const month = (date.getMonth() + 1).toString().padStart(2, '0');
    const day = date.getDate().toString().padStart(2, '0');
    const hour = date.getHours().toString().padStart(2, '0');
    const minute = date.getMinutes().toString().padStart(2, '0');
    
    return `${year}-${month}-${day} ${hour}:${minute}`;
  },

  /**
   * 获取预览文本（处理转写结果的时间戳格式）
   */
  getPreviewText(text) {
    if (!text) return '暂无转写结果';
    
    // 处理带时间戳的文本格式：[0:1.280,0:7.360]  今天的天气真好啊，想出去玩。
    // 提取纯文本内容，去除时间戳
    let cleanText = text;
    
    // 匹配时间戳格式: [start:end,start:end]
    const timestampRegex = /\[\d+:[\d.]+,\d+:[\d.]+\]\s*/g;
    cleanText = cleanText.replace(timestampRegex, '');
    
    // 去除多余的空格和换行
    cleanText = cleanText.trim();
    
    // 截取前50个字符作为预览
    return cleanText.length > 50 ? cleanText.substring(0, 50) + '...' : cleanText;
  },

  /**
   * 获取完整文本（去除时间戳）
   */
  getFullText(text) {
    if (!text) return '暂无转写结果';
    
    // 处理带时间戳的文本格式
    let cleanText = text;
    
    // 匹配时间戳格式: [start:end,start:end]
    const timestampRegex = /\[\d+:[\d.]+,\d+:[\d.]+\]\s*/g;
    cleanText = cleanText.replace(timestampRegex, '');
    
    // 去除多余的空格和换行
    cleanText = cleanText.trim();
    
    return cleanText;
  },

  /**
   * 切换转写结果展开/收回状态
   */
  togglePreviewExpand(e) {
    const index = e.currentTarget.dataset.index;
    const history = this.data.history;
    
    // 切换展开状态
    history[index].expanded = !history[index].expanded;
    
    this.setData({
      history: history
    });
    
    // 防止事件冒泡，避免触发列表项点击事件
    return false;
  },

  /**
   * 查看历史记录详情
   */
  viewHistoryDetail(e) {
    const index = e.currentTarget.dataset.index;
    const item = this.data.history[index];
    
    this.setData({
      showDetail: true,
      currentItem: item,
      currentIndex: index
    });
  },

  /**
   * 关闭详情弹窗
   */
  closeDetail() {
    this.setData({
      showDetail: false,
      currentItem: null,
      currentIndex: -1
    });
  },

  /**
   * 复制转换结果
   */
  copyResult() {
    // 不复制实际的recognitionResult内容，而是复制一个友好的提示信息
    const message = "语音转写结果已保存在系统中，但出于隐私保护考虑，不提供直接复制功能。";
    
    wx.setClipboardData({
      data: message,
      success: function() {
        wx.showToast({
          title: '提示信息已复制',
          icon: 'success'
        });
      },
      fail: function() {
        wx.showToast({
          title: '复制失败',
          icon: 'none'
        });
      }
    });
  },

  /**
   * 删除单条历史记录
   */
  async deleteHistoryItem(e) {
    const that = this;
    let currentItem;
    
    // 如果从列表项点击删除，通过index获取item
    if (e && e.currentTarget && e.currentTarget.dataset && e.currentTarget.dataset.index !== undefined) {
      const index = e.currentTarget.dataset.index;
      currentItem = this.data.history[index];
    } else {
      // 如果从详情弹窗删除，使用currentItem
      currentItem = this.data.currentItem;
    }
    
    if (!currentItem || !currentItem.id) {
      wx.showToast({
        title: '无法删除，记录ID不存在',
        icon: 'none'
      });
      return;
    }
    
    wx.showModal({
      title: '确认删除',
      content: '确定要删除这条记录吗？',
      success: async (res) => {
        if (res.confirm) {
          wx.showLoading({ title: '删除中...' });
          
          try {
            // 调用API删除单条历史记录
            await http.delete(`${config.API.HISTORY}/${currentItem.id}`);
            
            // 重新加载历史记录
            await that.loadHistory();
            
            wx.hideLoading();
            wx.showToast({
              title: '删除成功',
              icon: 'success'
            });
          } catch (error) {
            console.error('删除记录失败:', error);
            wx.hideLoading();
            wx.showToast({
              title: '删除失败',
              icon: 'none'
            });
          }
        }
      }
    });
  },

  /**
   * 显示清空确认对话框
   */
  showClearConfirm() {
    const that = this;
    wx.showModal({
      title: '确认清空',
      content: '确定要清空所有历史记录吗？此操作不可恢复。',
      success: function(res) {
        if (res.confirm) {
          that.clearAllHistory();
        }
      }
    });
  },

  /**
   * 清空所有历史记录
   */
  async clearAllHistory() {
    wx.showLoading({ title: '清空中...' });
    
    try {
      // 调用API清空所有历史记录
      await http.delete(`${config.API.HISTORY}/user`);
      
      this.setData({
        history: [],
        showDetail: false,
        currentItem: null,
        currentIndex: -1
      });
      
      wx.hideLoading();
      wx.showToast({
        title: '已清空历史记录',
        icon: 'success'
      });
    } catch (error) {
      console.error('清空历史记录失败:', error);
      wx.hideLoading();
      wx.showToast({
        title: '清空失败',
        icon: 'none'
      });
    }
  },

  /**
   * 获取状态文本
   */
  getStatusText(status) {
    const statusMap = {
      0: '未开始',
      1: '进行中',
      2: '已完成',
      3: '失败'
    };
    return statusMap[status] || '未知状态';
  },

  /**
   * 格式化音频时长（秒转换为时分秒）
   */
  formatDuration(seconds) {
    if (!seconds) return '00:00';
    const minutes = Math.floor(seconds / 60);
    const remainingSeconds = Math.floor(seconds % 60);
    return `${minutes.toString().padStart(2, '0')}:${remainingSeconds.toString().padStart(2, '0')}`;
  },

  /**
   * 准备分享数据（在直接分享之前调用）
   */
  prepareShare(e) {
    const index = e.currentTarget.dataset.index;
    const item = this.data.history[index];
    
    // 设置当前要分享的数据
    this.setData({
      shareItem: item
    });
    
    console.log('准备分享数据:', item.fileName || '未命名文件');
    
    // 这里不需要做任何事情，分享会自动触发 onShareAppMessage
  },

  /**
   * 显示更多分享选项
   */
  showMoreShareOptions(e) {
    const index = e.currentTarget.dataset.index;
    const item = this.data.history[index];
    
    const that = this;
    wx.showActionSheet({
      itemList: ['复制分享链接', '保存记录信息', '生成分享海报'],
      success: (res) => {
        switch(res.tapIndex) {
          case 0:
            // 复制分享链接
            that.copyShareLink(item);
            break;
          case 1:
            // 保存到本地
            that.saveToLocal(item);
            break;
          case 2:
            // 生成分享海报
            that.generateSharePoster(item);
            break;
        }
      },
      fail: (err) => {
        console.error('显示更多分享选项失败:', err);
      }
    });
  },

  /**
   * 生成分享海报
   */
  generateSharePoster(item) {
    wx.showToast({
      title: '正在生成海报...',
      icon: 'loading',
      duration: 2000
    });
    
    // 这里可以实现生成海报的逻辑
    setTimeout(() => {
      wx.showToast({
        title: '海报生成功能开发中',
        icon: 'none'
      });
    }, 2000);
  },

  /**
   * 复制分享链接
   */
  copyShareLink(item) {
    const shareText = `我刚刚使用语音转写助手完成了一个音频文件的转写：\n\n📁 文件名：${item.fileName || '未命名文件'}\n📊 处理类型：${item.type || '普通版'}\n⏰ 音频时长：${item.formattedDuration}\n📅 创建时间：${item.formattedDate}\n\n🎉 快来试试这个好用的语音转写工具吧！`;
    
    wx.setClipboardData({
      data: shareText,
      success: () => {
        wx.showToast({
          title: '分享内容已复制',
          icon: 'success'
        });
      },
      fail: () => {
        wx.showToast({
          title: '复制失败',
          icon: 'none'
        });
      }
    });
  },

  /**
   * 保存到本地
   */
  saveToLocal(item) {
    // 构造要保存的内容
    const content = `语音转写记录\n================\n文件名：${item.fileName || '未命名文件'}\n文件大小：${item.fileSize}\n音频时长：${item.formattedDuration}\n处理类型：${item.type || '普通版'}\n状态：${item.statusText}\n创建时间：${item.formattedDate}\n\n转写结果：\n${item.previewText || '暂无转写结果'}`;
    
    wx.setClipboardData({
      data: content,
      success: () => {
        wx.showToast({
          title: '内容已复制到剪贴板',
          icon: 'success',
          duration: 2000
        });
      },
      fail: () => {
        wx.showToast({
          title: '保存失败',
          icon: 'none'
        });
      }
    });
  },

  /**
   * 分享历史记录
   */
  shareHistoryItem(e) {
    const index = e.currentTarget.dataset.index;
    const item = this.data.history[index];
    
    wx.showActionSheet({
      itemList: ['发送给朋友', '保存到本地'],
      success: (res) => {
        if (res.tapIndex === 0) {
          wx.shareAppMessage({
            title: `分享语音转写记录: ${item.fileName || '未命名文件'}`,
            path: `/pages/history/history?id=${item.id}`,
          });
        } else if (res.tapIndex === 1) {
          wx.showToast({
            title: '保存成功',
            icon: 'success'
          });
        }
      },
      fail: (err) => {
        console.error('分享失败:', err);
      }
    });
  },

  /**
   * 页面分享配置（转发给好友）
   */
  onShareAppMessage() {
    const shareItem = this.data.shareItem;
    if (shareItem) {
      return {
        title: `语音转写记录：${shareItem.fileName || '未命名文件'}`,
        path: `/pages/history/history?shareId=${shareItem.id}`,
        imageUrl: '/images/share-cover.png' // 可选：设置分享图片
      };
    }
    
    // 默认分享配置
    return {
      title: '语音转写助手 - 让语音转文字更简单',
      path: '/pages/index/index',
      imageUrl: '/images/share-cover.png'
    };
  },

  /**
   * 页面分享到朋友圈配置
   */
  onShareTimeline() {
    const shareItem = this.data.shareItem;
    if (shareItem) {
      return {
        title: `刚刚完成了音频转写：${shareItem.fileName || '未命名文件'}`,
        imageUrl: '/images/share-cover.png'
      };
    }
    
    return {
      title: '语音转写助手 - 高效的语音转文字工具',
      imageUrl: '/images/share-cover.png'
    };
  },

  /**
   * 跳转到首页
   */
  goToHome() {
    wx.switchTab({
      url: '/pages/index/index'
    });
  },

  /**
   * 处理客服会话
   * @param {Object} e - 事件对象
   */
  handleContact(e) {
    console.log('客服会话事件:', e);
    
    // 检查是否进入了客服会话
    if (e.detail.errMsg === 'contact:ok') {
      console.log('成功进入客服会话');
    } else if (e.detail.errMsg === 'contact:fail') {
      console.log('进入客服会话失败');
      this.showCustomerServiceDialog();
    }
  },

  /**
   * 显示客服对话框（降级方案）
   */
  showCustomerServiceDialog() {
    wx.showModal({
      title: '联系客服',
      content: '如需帮助，请添加微信客服：\n\n微信号：speech-helper\n或者扫描二维码联系我们\n\n工作时间：9:00-18:00',
      confirmText: '复制微信号',
      cancelText: '取消',
      success: (res) => {
        if (res.confirm) {
          // 复制微信号到剪贴板
          wx.setClipboardData({
            data: 'speech-helper',
            success: () => {
              wx.showToast({
                title: '微信号已复制',
                icon: 'success'
              });
            }
          });
        }
      }
    });
  }
})